#ifndef NETMANAGER_H
#define NETMANAGER_H

#include <QObject>
#include <QTcpSocket>
#include <QDebug>
#include <global_client.h>

/**
 * @brief The TcpTask class
 * 网络任务类
 */
class TcpTask : public QObject
{
    Q_OBJECT
public:
    explicit TcpTask(QObject *parent = nullptr);
    ~TcpTask();

    bool connectToServer(const QString &host, quint16 port);
    void sendCommand(const QByteArray &data);

private slots:
    void onConnected();
    void onReadyRead();
    void onDisconnected();
    void onErrorOccurred(QAbstractSocket::SocketError socketError);


signals:
    /**
     * @brief ChatHistoryReady
     * @param history
     * 历史记录获取成功后发出信号
     */
    void ChatHistoryReady(QList<ChatHistory> history);

    /**
     * @brief chatHistoryError
     * 历史记录获取失败后发出信号
     */
    void chatHistoryError();

    void FriendListReady(QList<Friend>);
    void FriendListError();

    void UserInformationReady(User user);
    void UserInformationError();

    void InsertChatHistoryOk();
    void InsertChatHistoryError();

    void UpdateChatInformationOk();
    void UpdateChatInformationError();

    void InsertUserOk();
    void InsertUserError();

    void insertFriendRelationOk();
    void insertFriendRelationError();

    void DeleteFriendRelationOk();
    void DeleteFriendRelationError();

    /**
     * @brief free
     * 完成当前任务时发送信号
     */
    void free();

private:
    QTcpSocket *tcpSocket;

    // 当前是否有任务
    bool busy;

};

#endif // NETMANAGER_H
